package com.pengliu.common.mybatis.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.github.pagehelper.PageInfo;
/**
 * user: pengliu
 * date: 2017年10月17日
 * desc:
 * @author pengliu
 */
public interface Mapper<R, E, ID> {

	/**
	 * user: pengliu
	 * date: 2017年10月17日
	 * desc: 根据条件查询数量
	 * @param example
	 * @return
	 * @author pengliu
	 */
    int countByExample(E example);

    /**
     * user: pengliu
     * date: 2017年10月17日
     * desc: 根据条件删除数据
     * @param example
     * @return
     * @author pengliu
     */
    int deleteByExample(E example);

    /**
     * user: pengliu
     * date: 2017年10月17日
     * desc: 根据主键删除数据
     * @param id
     * @return
     * @author pengliu
     */
    int deleteByPrimaryKey(ID id);

    /**
     * user: pengliu
     * date: 2017年10月17日
     * desc: 根据实体新增数据
     * @param record
     * @return
     * @author pengliu
     */
    int insert(R record);

    /**
     * user: pengliu
     * date: 2017年10月17日
     * desc: 根据条件查询集合数据
     * @param example
     * @return
     * @author pengliu
     */
    List<R> selectByExample(E example);

    /**
     * user: pengliu
     * date: 2017年10月17日
     * desc: 根据主键查询数据
     * @param id
     * @return
     * @author pengliu
     */
    R selectByPrimaryKey(ID id);

    /**
     * user: pengliu
     * date: 2017年10月17日
     * desc: 根据条件更新数据
     * @param record
     * @param example
     * @return
     * @author pengliu
     */
    int updateByExampleSelective(@Param("record") R record, @Param("example") E example);

    /**
     * user: pengliu
     * date: 2017年10月17日
     * desc: 根据实体更新数据
     * @param record
     * @return
     * @author pengliu
     */
    int updateByPrimaryKeySelective(R record);
    
    /**
     * user: pengliu
     * date: 2017年10月17日
     * desc: 根据条件分页查询
     * @param example
     * @return
     * @author pengliu
     */
    PageInfo<R> selectPageInfo(E example);
}
